var sanitize = require('validator').sanitize;

var Topic = require('../proxy').Topic;
var Tag = require('../proxy').Tag;
var User = require('../proxy').User;

var config = require('../config').config;
var EventProxy = require('eventproxy');

exports.list_topic = function (req, res, next) {
  var page = Number(req.query.page) || 1;
  var limit = config.list_topic_count;
  var query = {'_id': {'$in': topic_ids}};
  var opt = {skip: (page - 1) * limit, limit: limit, sort: [['create_at', 'desc']]};
  Topic.getTopicsByQuery(query, opt, function (err, topics) {
  });
};

exports.edit_tags = function (req, res, next) {
  if (!req.session.user) {
    res.render('notify/notify', {error: '你还没有登录。'});
    return;
  }
  if (!req.session.user.is_admin) {
    res.render('notify/notify', {error: '管理员才能编辑标签。'});
    return;
  }
  Tag.getAllTags(function (err, tags) {
    if (err) {
      return next(err);
    }
    res.render('tag/edit_all', {tags: tags});
  });
};

exports.add = function (req, res, next) {
  var name = sanitize(req.body.name).trim();
  name = sanitize(name).xss();
  var order = req.body.order;

  if (name === '') {
    res.render('notify/notify', {error: '信息不完整。'});
    return;
  }

  Tag.getTagByName(name, function (err, tag) {
    if (err) {
      return next(err);
    }
    if (tag) {
      res.render('notify/notify', {error: '这个标签已存在。'});
      return;
    }
    Tag.newAndSave(name, order, function (err) {
      if (err) {
        return next(err);
      }
      res.redirect('/tags/edit');
    });
  });
};

exports.edit = function (req, res, next) {
  var tag_name = req.params.name;
  Tag.getTagByName(tag_name, function (err, tag) {
    if (err) {
      return next(err);
    }
    if (!tag) {
      res.render('notify/notify', {error: '没有这个标签。'});
      return;
    }

    Tag.getAllTags(function (err, tags) {
      if (err) {
        return next(err);
      }
      res.render('tag/edit', {tag: tag, tags: tags});
      return;
    });
  });
};

exports.update = function (req, res, next) {
  var id = req.params.id;
  Tag.getTagById(id, function (err, tag) {
    if (err) {
      return next(err);
    }
    if (!tag) {
      res.render('notify/notify', {error: '没有这个标签。'});
      return;
    }

    var name = sanitize(req.body.name).trim();
    name = sanitize(name).xss();
    var order = req.body.order;
    if (name === '') {
      res.render('notify/notify', {error: '信息不完整。'});
      return;
    }
    Tag.getTagByName(name, function (err, has) {
      if (err) return next(err);
      if (tag.name != name && has) return res.render('notify/notify', {error: '标签已存在。'});
      tag.name = name;
      tag.order = order;
      tag.save(function (err) {
        if (err) {
          return next(err);
        }
        res.redirect('/tags/edit');
      });
    });
  });
};

exports.delete = function (req, res, next) {
  var tag_name = req.params.name;
  Tag.getTagByName(tag_name, function (err, tag) {
    if (err) {
      return next(err);
    }
    if (!tag) {
      res.render('notify/notify', {error: '没有这个标签。'});
      return;
    }
    tag.remove(function (err) {
      if (err) {
        return next(err);
      }
      res.redirect('/tags/edit');
    });
    /*
    var proxy = new EventProxy();
    var done = function () {
      tag.remove(function (err) {
        if (err) {
          return next(err);
        }
        res.redirect('/');
      });
    };
    proxy.assign('topic_tag_removed', 'tag_collect_removed', done);
    proxy.fail(next);
    // 删除带该标签的主题标签关系
    TopicTag.removeByTagId(tag._id, proxy.done('topic_tag_removed'));
    // 删除带该表前的收藏关系
    TagCollect.removeAllByTagId(tag._id, proxy.done('tag_collect_removed'));
    */
  });
};
